package com.iwhalecloud.bss.kite.cucc.client.api.inf;

import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.iwhalecloud.bss.kite.client.dto.DataResult;
import com.iwhalecloud.bss.kite.cucc.client.dto.customerOrderInformation.QryGrpMemberListByGrpReq;
import com.iwhalecloud.bss.kite.cucc.client.dto.devInfo.response.QueryChannelInfoSerRsp;
import com.iwhalecloud.bss.kite.cucc.client.dto.devInfo.response.QueryDeveloperInfoRespDTO;
import com.iwhalecloud.bss.kite.cucc.client.dto.goods.GoodPriceReqDTO;
import com.iwhalecloud.bss.kite.cucc.client.dto.order.ContractRequestDTO;
import com.iwhalecloud.bss.kite.cucc.client.dto.order.ExecAddressDTO;
import com.iwhalecloud.bss.kite.cucc.client.dto.order.KiteCartFindoopOrderReqDTO;
import com.iwhalecloud.bss.kite.cucc.client.dto.order.ResPreJudgeDTO;
import com.iwhalecloud.bss.kite.cucc.client.dto.order.SaleManageDTO;
import com.iwhalecloud.bss.kite.cucc.client.dto.order.UserQueryDTO;
import com.iwhalecloud.bss.kite.cucc.client.dto.order.VpnServiceReqDTO;
import com.iwhalecloud.bss.kite.cucc.client.dto.org.GovUserCodeRspDTO;
import com.iwhalecloud.bss.kite.cucc.client.dto.org.QryGovUserCodeReqDTO;
import com.iwhalecloud.bss.kite.cucc.client.dto.pos.KitePosDTO;
import com.iwhalecloud.bss.kite.cucc.client.dto.scene.discount.CustTraderBy;
import com.iwhalecloud.bss.kite.cucc.client.dto.scene.discount.HistoryPriceData;
import com.iwhalecloud.bss.kite.cucc.client.dto.webService.CustContractRsp;
import com.iwhalecloud.bss.kite.cucc.client.dto.webService.QryIOTOppoDockingSalesRsp;
import com.iwhalecloud.bss.kite.cucc.client.enumerate.UserDetailTagName;

/**
 * @Interface : IInfServiceBus
 * @Description : 调用外中心服务总线
 * @Author : xie.zhengjun
 * @Date : 2020/9/14 20:25
 */
public interface IInfServiceBus {
    /**
     * 历史价格查询
     *
     * @param productId 产品编码 必填
     * @param custName  客户名称 必填
     * @param servId    业务号码
     * @param page      历史价格页码 必填
     * @param size      历史价格数量 必填
     * @return
     */
    List<HistoryPriceData> listHistoryPriceData(String productId, String custName, String servId, Integer page,
                                                Integer size);

    /**
     * 资源核查单查询
     *
     * @param productId 产品编码 必填
     * @param custName  客户名称 必填
     * @param servId    业务号码
     * @param custPage  客户页码 必填
     * @param custSize  客户数量 必填
     * @return
     */
    List<CustTraderBy> listCustTraderBy(String productId, String custName, String servId, Integer custPage,
                                        Integer custSize);

    /**
     * 合同信息-存量合同查询
     *
     * @param custId       必填
     * @param contractNo
     * @param contractName
     * @param pageNum      必填
     * @param pageSize     必填
     * @return
     */
    List<CustContractRsp> listContractInfo(String custId, String contractNo, String contractName, String dataCode, String provinceCode, int pageNum,
                                            int pageSize,String cateId);

    /**
     * 合同信息-存量合同查询
     *
     * @param custId       必填
     * @param contractNo
     * @param contractName
     * @param pageNum      必填
     * @param pageSize     必填
     * @return
     */
    Map<String, Object> listContractInfos(String custId, String contractNo, String contractName, String dataCode, String provinceCode, int pageNum,
                                           int pageSize,String contractId);
    /**
     * 结束工单任务
     *
     * @param workSheetId 必填
     * @param dealResult  必填
     * @param staffId     必填
     * @param taskCode
     * @param updateData
     * @param otherData
     * @return
     */
    Map<String, Object> endWorkSheetTask(String workSheetId, String taskCode, String taskId, String dealResult, String staffId,
                                         Object updateData, Object otherData);


    Map<String, Object> endWorkSheetTaskBatch(String workSheetId, String taskCode, String taskId, String dealResult,
                                              String staffId, Object updateData, Object otherData);

    /**
     * 查询销售经理
     *
     * @param staffId     必填
     * @param channelId   必填
     * @param name        必填
     * @param origDomain  必填
     * @param productType 必填
     * @return
     */
    List<SaleManageDTO> querySaleManager(String staffId, String channelId, String name, String origDomain,
                                         String productType);


    /**
     * 查询装机地址
     *
     * @param addrMap
     * @return
     */
    List<ExecAddressDTO> queryAddress(Map addrMap);


    /**
     * 客户列表查询
     * @return
     */
    Map<String, Object> customerListQuery(Map custInfo);

    /**
     * 客户详情查询
     * @param custInfo
     * @return
     */
    Map<String, Object> getCustomerDetail(Map custInfo);

    /**
     * 一站进度查询
     * @param info
     * @return
     */
    Map<String, Object> getOneSchedule(Map info);

    /**
     * OSS进度查询
     * @param ossInfo
     * @return
     */
    Map<String, Object> queryOssProGress(Map ossInfo);

    /**
     * 资源预判查询
     * @param resInfo
     * @return
     */
    List<ResPreJudgeDTO> queryResPrejudge(Map resInfo);

    /**
     * 流程图数据查询
     * @param flowChartMap
     * @return
     */
    Map<String, Object> getProcessFlowChart(Map flowChartMap);

    /**
     * 特殊接口处理
     * @param inParam
     * @return
     */
    Map<String, Object> specialProcess(String opType, String orderId, Map<String, Object> flowProcessDataMap, Map<String, Object> businessData);

    /**
     * 查询登录信息
     * @param authSessionId 会话ID
     * @return
     */
    Map<String, Object> qryLoginInfo(String authSessionId);

    /**
     * 政企订单文件上传服务
     * @param fileName 文件名
     * @param fileType 附件文件类型
     * @param fileBody BASE64编码
     * @return
     */
    Map<String, Object> orderCenterFileUpload(String fileName, String fileType, String fileBody);



    /**
     * 政企订单中心文件下载
     * @param sourceId
     * @param orderId
     * @return
     */
    Map<String, Object> orderCenterFileDownload(String fileId);

    /**
     * 政企订单受理单下载服务
     * @param sourceId
     * @param orderId
     * @return
     */
    Map<String, Object> acceptanceOrderDownload(String sourceOrderId, String orderId);

    /**
     * 渠道信息查询（批量）服务
     * @param qryChannelInfoReq
     * @return
     */
    PageInfo<QueryChannelInfoSerRsp> qryChannelInfo(Map<String, Object> qryChannelInfoReq, Integer pageSize, Integer pageNum);

    /**
     * 发展人信息查询
     * @param qryDeveloperInfoReq
     * @return
     */
    PageInfo<QueryDeveloperInfoRespDTO> qryDeveloperInfoSer(Map<String, Object> qryDeveloperInfoReq, Integer pageSize, Integer pageNum);

    /**
     * 受理单下载
     * @param orderId
     * @param sourceOrderId
     * @return
     */
    Map<String, Object> contractAcceptanceOrderDownload(String orderId, String sourceOrderId);

    /**
     * 附件上传
     * @param fileName 附件名称，不带后缀
     * @param fileExt 附件后缀名（例123.jpg）则，传jpg即可
     * @param fileContent 附件base64字符串编码，不超过10M
     * @return
     */
    Map<String, Object> uploadFile(String fileName, String fileExt, String fileContent);

    /**
     * 订单归集接口
     * @param requestParam
     * @return
     */
    Map<String, Object> orderCenterPathVariable(String requestParam);

    /**
     * 商机查询接口
     * @param custId
     * @return
     */
    List<QryIOTOppoDockingSalesRsp> queryIOTOppoDockingSales(String custId);

    /**
     * 订单更新接口
     * @param posDto
     * @param custId
     * @param orderId
     * @param rentFlowData
     * @return
     */
    Map<String, Object> orderCenterUpdatePiece(KitePosDTO posDto, String custId, String orderId);

    /**
     * 批量查询客户账户信息接口
     * @param posDto
     * @return
     */
    Map<String, Object> batchQryCustAccounts(String isCenterDirectSign, String custId, String custProvinceCode);

    Map<String, Object> queryCustIOTInfos(String custId, String provinceId, int pageNum, int pageSize);
    /**
     * 查询发展人渠道名称
     * @param channelId
     * @return
     */
    String queryDeveloChannelName(String channelId, String ProvinceCode);

    /**
     * 获取渠道信息
     * @param channelId
     * @param ProvinceCode
     * @return
     */
    Map<String, Object> queryDeveloChannelInfo(String channelId, String ProvinceCode);

    /**
     * 查询用户列表
     *
     * @param paramMap
     * @return
     */
    UserQueryDTO queryUserList(Map<String, String> paramMap);

    /**
     * 查询用户详情
     *
     * @param inMap
     * @param userDetailTagNames TAG_NAME 详情见{@link UserDetailTagName}
     * @return
     */
    Map<String, Object> queryUserDetail(Map<String, Object> inMap, List<UserDetailTagName> userDetailTagNames);

    Map<String, Object> queryWorkSheetsMergeInf(String orderId, String flowId);

    /**
     * 工单合并查询
     * @param orderId
     * @return
     */
    List<Map<String, Object>> queryWorkSheetsMerge(String orderId, String flowId);


    /**
     * 工单合并查询
     * @param offerCategoryId 商品分类ID
     * @param relationKind 1融合关系  2集团群组  3主从关系
     * @return
     */
    List<Map<String, Object>> queryRelationRoles(String offerCategoryId, String relationKind);

    DataResult<Map> queryGoodPrice(GoodPriceReqDTO goodPriceReqDTO);

    Map<String, Object> queryOaAccount();

    //商机查询服务
    Map<String, Object> queryOppInfoList(Map map);
    //商机查询详情
    Map<String, Object> queryOppInfodetail(Map map);
    /**
     * 合作伙伴新增查询接口
     * @param map
     * @return
     */
    Map<String, Object> queryNewPartnerQuery (Map map);
    /**
     * 合作伙伴复用查询接口
     * @param map
     * @return
     */
    Map<String, Object> partnerReuseQuery (Map map);
    /**
     * 获取运营方下运营专员
     * @param map
     * @return
     */
    List<String> queryOpeList (Map map);

    String getDownLoadFile (Map map);

    /**
     * 调cb获取用户信息
     * @param inParamMap
     * @return
     */
    Map<String, Object> queryGroupMemberUserInfo(Map inParamMap);

    void insertAreaInfoBatch(String areaLevel);

    PageInfo<SaleManageDTO> querySalesPerson(String staffId, String channelId, String name, String origDomain, String productType, int pageNum, int pageSize);

    /**
     * 查询经办人信息
     *
     * @param map
     * @return
     */
    List<Map<String, Object>> queryHandlerInfo(Map<String, Object> map);

    /**
     * 查询自然客户附件下载
     *
     * @param String
     * @return
     */
    Map<String, Object> queryHandlerFile(String fileKey);

    /**
     * 查询商机信息
     *
     * @param map
     * @return
     */
    PageInfo<Map<String, Object>> queryOppoInfo(Map<String, Object> map);

    Map<String, Object> qryGrpMemberListByGrp (String custId);

    Map<String, Object> batchQueryDeveloChannelInfo(String channelId, String ProvinceCode);
    JSONObject qryHoliday(String provinceCode, String startDate, String offset);
    JSONObject qrySettlementAccount(String IB_OB);
    JSONObject qryPopData(String countryCode);
    JSONObject operationPlatform();
    JSONObject queryGovEnterpriseOrg(String type,String value);
    JSONObject queryOrgInfo(String orgCode,String provinceCode,String cityCode,String level);

    /**
     * 根据入参查询查询群组成员列表
     * @param qryGrpMemberListByGrpReq
     * @return
     */
    Map<String, Object> qryGrpMemberListByGrpNew (QryGrpMemberListByGrpReq qryGrpMemberListByGrpReq);

    /**
     * 创建合同
     * @param createAndUploadContract
     * @return
     */
    Map<String, Object> createAndUploadContract (ContractRequestDTO contractRequestDTO);

    /**
     * 判断订单资源是否具备
     * @param orderId
     * @return
     */
    Map<String, Object> queryJudgeResources(String orderId);

    /**
     * 查询区域
     * @param parentAreaCode
     * @param locationType
     * @return
     */
    List<Map<String, Object>> queryRegion(String parentAreaCode, String locationType);

    /**
     * 实名制列表
     *
     * @return
     */
    Map<String, Object> registrationInfo(Map map, int pageNum,
                                           int pageSize);
    /**
     * 实名制详情
     *
     */
    Map<String, Object> registrationInfoDetail(String usercode, String iotTagCode);

    GovUserCodeRspDTO qryGovUserInfo(QryGovUserCodeReqDTO qryGovUserCodeReqDTO);

    /**
     * 查询oop折扣申请单
     * @param reqDTO
     * @return
     */
    String findoopOrderList(KiteCartFindoopOrderReqDTO reqDTO);

    /**
     * 查询VPN服务信息详情
     * @param reqDTO
     * @return
     */
    List findVpnBusinessNamesList(VpnServiceReqDTO reqDTO);

    /**
     * 地图辅助查询鉴权服务
     * @param param
     * @return
     */
    String getMapAidToken(Map<String, Object> param);

    /**
     * Description: <br>
     *  根据工号查询渠道信息
     * @author tengg<br>
     * @taskId <br>
     * @param userId
     * @param userCode
     * @return <br>
     */
    Map<String, Object> queryChannelByUserInfo(String userId, String userCode, String prodviceCode);
    /**
     *  营销中心上传接口
     * @param reqMap
     * @param bytes
     */
    List<JSONObject> marketCenterFileUpload(Map<String,String> reqMap, byte[] bytes);
}
